import { Message } from 'element-ui'
import router from './router'
import store from './store'
// import { removeToken } from './utils/auth'

// 声明白名单 不需要登录
const whiteList = ['/login', '/404'] // no redirect whitelist
// 注册导航守卫
router.beforeEach(async(to, from, next) => {
  const _token = store.getters.token
  // 有无token 判断
  if (_token) {
    // 有token
    // 有就做用户信息判断
    if (store.getters.isLogin && to.path === '/login') {
      // 有token 有用户信息id 又要去登录  不用登陆,直接去首页
      return next('/')
    }

    // 不去登录 用户信息又存在  直接放走
    if (store.getters.isLogin) {
      return next()
    }

    // 用户信息不存在 token存在
    // 对于异步函数的错误处理try
    try {
      // 尝试获取一下用户信息
      await store.dispatch('user/getUserInfo')
      console.log('用户信息获取完毕')
      console.log('userInfo:', store.getters.userInfo)

      // token没有问题
      if (to.path === '/login') {
        return next('/')
      }
      return next()
    } catch (error) {
      // token存在  有问题
      // 删除token
      // removeToken()

      // 使用action 删掉所以要删的
      store.dispatch('user/logout')
      // 提示用户
      Message.error('请重新登录!')
      // 去登陆页  如果在登录页就会一直重复提醒弹框 , 所以要做个判断
      if (to.path === '/login') {
        return next()
      }
      // 不是登录页 打回登录页
      // fullpath可以获取 /xxx?key=value
      // path 只可以获取 /xxx
      return next('/login?redirect=' + to.fullPath)
    }
  }

  // 没有token 白名单
  if (whiteList.includes(to.path)) {
    // includes存在 true 不存在false
    return next()
  }

  // 没有token 又 不在白名单中 去登陆
  next('/login')
})
